package model

import (
	"go-malphite/app/common/dto"
	"gorm.io/gorm"
	"time"
)

type User struct {
	UserId    int64          `gorm:"primarykey"`
	UserName  string         `gorm:"type:varchar(30)"` // 用户名称
	Password  string         // 用户密码
	Salt      string         // 用户密码盐值
	RoleId    int64          // 所属角色id
	CreatedAt time.Time      // 创建时间
	UpdatedAt time.Time      // 修改时间
	DeletedAt gorm.DeletedAt `gorm:"index"` // 是否已删除
}

func (table *User) TableName() string {
	return "user"
}

type UserRegisterParams struct {
	UserName   string `json:"userName" binding:"required,min=3,max=30"`       // 用户名称
	Password   string `json:"password" binding:"required,min=6,max=100"`      // 用户密码
	RePassword string `json:"rePassword" binding:"required,eqfield=Password"` // 确认密码
}

type UserLoginParams struct {
	UserName string `json:"userName"` // 用户名称
	Password string `json:"password"` // 用户密码
	CaptchaReq
}

type UserLoginRes struct {
	UserId    int64  `json:"userId"`    // 用户id
	UserName  string `json:"userName"`  // 用户名称
	CreatedAt string `json:"createdAt"` // 创建时间
	UpdatedAt string `json:"updatedAt"` // 修改时间
	Token     string `json:"token"`     // 用户token
}

type UserEditParams struct {
	UserName    string `json:"userName" form:"userName"`       // 用户名称
	OldPassword string `json:"oldPassword" form:"oldPassword"` // 旧密码
	NewPassword string `json:"newPassword" form:"newPassword"` // 新密码
	RePassword  string `json:"rePassword" form:"rePassword"`   // 确认密码
}

type UserOneRes struct {
	UserId    int64  `json:"userId"`   // 用户id
	UserName  string `json:"userName"` // 用户名称
	CreatedAt string `json:"createAt"` // 创建时间
	UpdatedAt string `json:"updateAt"` // 修改时间
	RoleId    int64  `json:"roleId"`   // 所属角色id
	RoleName  string `json:"roleName"` // 所属角色名称
}

type UserListRes struct {
	UserId    int64  `json:"userId"`   // 用户id
	UserName  string `json:"userName"` // 用户名称
	CreatedAt string `json:"createAt"` // 创建时间
	UpdatedAt string `json:"updateAt"` // 修改时间
	RoleId    int64  `json:"roleId"`   // 所属角色id
	RoleName  string `json:"roleName"` // 所属角色名称
}

type UserPageRes struct {
	PageRes dto.PageRes
	Records []UserOneRes `json:"records"`
}
